n, m = tuple(map(int, input().split()))
if m>0:
arr = list(map(int, input().split()))
arr.sort()
ans = "YES"
cnt = 0
if (n in arr) or (1 in arr):
ans = "NO"
else:
for i in range(1,m):
if arr[i]-arr[i-1]==1:
cnt+=1
else:
cnt=0
if cnt==2:
ans = "NO"
break
print(ans)
else:
print("YES")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define IO ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
const long long MOD = 1e9 , OO = 1e18;
const double PI = acos(-1);
const int N = 1e5 + 5;
void solve()
{
ll n,m,c=0,mx=0,f=0;
cin >> n >> m;
ll a[m];
for(ll i=0 ; i < m ; i++)
cin >>a[i];
sort(a,a+m);
for(ll i=0 ; i < m-1 ; i++){
if(a[i+1]-a[i]==1)c++;
else c=0;
mx=max(mx,c);
}
for(ll i=0 ; i < m ; i++){
if(a[i]==1 || a[i]==n){
f=1;
break;
}
}
if(mx>=2 || f )cout<<"NO";
else cout<<"YES";
return;
}
int main()
{
IO
ll t = 1;
//cin >> t;
while (t--)
{
solve();
cout<<"\n";
}
return 0;
}
112. Path Sum | 1556A - A Variety of Operations |
136. Single Number | 169. Majority Element |
119. Pascal's Triangle II | 409. Longest Palindrome |
1574A - Regular Bracket Sequences | 1574B - Combinatorics Homework |
1567A - Domino Disaster | 1593A - Elections |
1607A - Linear Keyboard | EQUALCOIN Equal Coins |
XOREQN Xor Equation | MAKEPAL Weird Palindrome Making |
HILLSEQ Hill Sequence | MAXBRIDGE Maximise the bridges |
WLDRPL Wildcard Replacement | 1221. Split a String in Balanced Strings |
1002. Find Common Characters | 1602A - Two Subsequences |
1555A - PizzaForces | 1607B - Odd Grasshopper |
1084A - The Fair Nut and Elevator | 1440B - Sum of Medians |
1032A - Kitchen Utensils | 1501B - Napoleon Cake |
1584B - Coloring Rectangles | 1562B - Scenes From a Memory |
1521A - Nastia and Nearly Good Numbers | 208. Implement Trie |